если работаем под linux apt-get install python apt-get install python-qt4-dev если работаем под windows сначало нужно поставить питон на винду (2.7, ибо 3-й не работает с проектом) потом идём сюда http://www.riverbankcomputing.com/software/pyqt/download и качаем инсталятор нужного pyqt4 если у вас вижак: пытаемся создать проект в VS на питоне и она автоматом скажет, что нужно поставить, ибо её не хватает если у вас PyCharm (тут самое лучшее автодополнение, ...) (но как и к любой ide к нему нужно привыкнуть): всё уже работает Я писал под pycharm было важно, чтобы в пути к вашему проекту нигде не было никаких русских букв, а то будут проеблмы с проектом, и с дебаггером в pycharm запускаем файл RelOpt.py и у вас должно появиться qt важно не пропустить в тексте волканова: 1) ставим “Нет” в меню “Проверка ограничений на время” 2) не ставим галочку в пункте “Использовать метамодели” читаем формулировку задания от Волканова 1) у нас в задании не используются Metamodels 2) не используются Module поэтому в них можно не вникать на той диаграмме, а в коде не разбираться !!! Нужно читать мои комментарии начиная с начала файла IA/IA.py !!!!! Полезно прочитать те, которые в самом начале файла, и те которые в функции Run - там написано вообще о проекте, а не про алгоритм В силу своего раздолбайства - я хоть и в какой-то момент имел в руках xml файл, описывающий систему из статьи, ... В общем я умудрился его случайно грохнуть, хотя и сохранил results (прямо как в статье, правда? - (там есть результаты, но почти не описаны константы и параметры для системы не все)). Так что не ищите систему из статьи - их у меня больше нету)) Однако вам будет полезно то, что ниже. //==================================================================================================================================================== Значения xml файлов: // Название системы и её общая стоимость, в которую нужно уложиться // Порядковый номер модуля (нумерация вроде с нуля) // Остальные парамеры - в основном вероятности используемые для разных tool, описанных ниже // Эти параметры обязательно должны быть указаны, хоть и могут быть фиктивными, иначе модель не распарсится // Возможные варианты МОО, которые могут реализовываться // Совокупность software компонент, которые могут решать данную задачу // rel - надёжность, cost - стоимость // Совокупность аппаратных компонент, на которых могут выполняться программные компоненты // Время выполнения software компоненты на конкретной аппаратной компоненте // Это означает, что данные от 6-го модуля идут к 7-му в 9 условных единиц // Т.е. должно пройти 9 порций данных, а сколько времени проходит порция данных Парамеры алгоритма задаются вами и вами же парсятся ребятки, вот был пример моего алгоритма, значения всех этих параметров описаны в моём коде //==================================================================================================================================================== Про мой алгоритм - Имунный алгоритм терминология: антиген - цель антитело - решение, в текущий момент времени подсистемы расположены последовательно каждая подсистема состоит из параллельных компонент условие останова алгоритма - количество шагов 3.1 смотри диаграмму и 8 шагов алгоритма 3.2 Fig.3 в pdf Решением (да и вообще текущие данные) - строки (бинарные) (строка - это антитело) Строка состоит из подстрок - подсистем системы Подстроки состоят из более мелких подстрок, которые представляют из себя отображение типа компонента системы, и его надёжности () вещественное число представляется в бинарном виде и обрезается по какое-то разряд 3.2 Используется на шаге 6 для устранения повторений На шаге 6 после мутаций - нужно будет устранить те мутации, которые получились слишком похожими для этого считается норма, которая должна быть не меньше, чем некоторый заданный порог норма разности 2-х векторов - каждый вектор состоит из набора чисел представляющих свою подсистему (число было сгенерированно из строки, представляющей подсистему) причём, если мутации похожи, то удаляются оба антитела норма проверяется для каждой пары 3.3 Используется на шаге 2-3 для подсчёта весов и вычисления лучших антител Рассчёт веса конкретного экземпляра (антитела) (решения задачи записанного строкой) (формула (2)) - (penalty) сумма для каждой подсистемы её веса, т.е. суммы произведения стоимости комопненты на его количества и за вычетом ограничения на ресурс обрезается по нулю (если мы вычев ограничение на ресурс получили меньше 0, т.е. что ресурса хватило) Функция веса (affinity) (вероятность сбоя в системе) делённое на (1 + penalty) где вероятность сбоя в системе - (формула (1) без max) - произведение по всем подсистемам (1 - надёжность подсистемы (т.е. произведение надёжности компоненты в степени количества этой компоненты)) 3.4 Используется на шаге 5 при мутациях - crossover and mutation 26 ссылка - статья - L.N. De Castro, F.J. Von Zuben, The clonal selection algorithm with engineering applications, in: Workshop Proceedings of the GECCO 2000, #####, 2000, pp. 36–37. crossover - случаным образом скрещиваем mutation - случайным образом меняем части строк P - начальные антитела 1) к набору антител Pr, выбранных среди P добавляются memory антитела, которые появляются за счёт случайных изменений уже существующих антител и лишь если их affinity увеличилась при мутации. 2) выбираем n лучших 3) клонируем их в зависимости от их affinity 4) отправляем всех на hypermutation, которая происходит в пропорции с affinity 5) Выбираем лучших и суём на место тех, которые были в первом пункте как memory антитела 6) Заменяем некоторые выбранные d антител в выбранной ранее Pr А теперь повторяем всю эту хрень кучу раз (сколько задано в параметрах) //==================================================================================================================================================== У них оптимальными значениями было: mutation rate = 0.01 crossover rate = 0.86 the maximum clone number = 10 number of generations was specified to be = 3000 The overall system includes 14 subsystems (n= 14) with weight and cost limitation are 186 and 130, respectively The reliability of the overall system is 0.9841755 Step 1 - генерируем случайную популяцию Step 2 - подсчитываем веса каждого антитела Step 3 - выбираем n самых лучших по весу Step 4 - клонируем n самых лучших по весу, пропорционально их весу Step 5 - мутируем Step 6 - убираем похожих Step 7 - выполнино ли условие останова Step 8 - выбираем самого лучшего по весу и выдаём в ответ